home *** CD-ROM | disk | FTP | other *** search
/ InterCD 2000 September / september_2000.iso / intercd / root / ^Linux / cdrecord-1.8.1 / cdrecord / scsimmc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-03-28  |  16.8 KB  |  462 lines

  1. /* @(#)scsimmc.h    1.4 99/03/28 Copyright 1997 J. Schilling */
  2. /*
  3.  *    Definitions for SCSI/mmc compliant drives
  4.  *
  5.  *    Copyright (c) 1997 J. Schilling
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22.  
  23. #ifndef    _SCSIMMC_H
  24. #define    _SCSIMMC_H
  25.  
  26. #include <utypes.h>
  27. #include <btorder.h>
  28.  
  29. typedef struct opc {
  30.     Uchar    opc_speed[2];
  31.     Uchar    opc_val[6];
  32. } opc_t;
  33.  
  34. #if defined(_BIT_FIELDS_LTOH)    /* Intel bitorder */
  35.  
  36. struct disk_info {
  37.     Uchar    data_len[2];        /* Data len without this info    */
  38.     Ucbit    disk_status    : 2;    /* Status of the disk        */
  39.     Ucbit    sess_status    : 2;    /* Status of last session    */
  40.     Ucbit    erasable    : 1;    /* Disk is erasable        */
  41.     Ucbit    res2        : 3;    /* Reserved            */
  42.     Uchar    first_track;        /* # of first track on disk    */
  43.     Uchar    numsess;        /* # of sessions        */
  44.     Uchar    first_track_ls;        /* First track in last sessaion    */
  45.     Uchar    last_track_ls;        /* Last track in last sessaion    */
  46.     Ucbit    res7_04        : 5;    /* Reserved            */
  47.     Ucbit    uru        : 1;    /* This is an unrestricted disk    */
  48.     Ucbit    dbc_v        : 1;    /* Disk bar code valid        */
  49.     Ucbit    did_v        : 1;    /* Disk id valid        */
  50.     Uchar    disk_type;        /* Disk type            */
  51.     Uchar    res9[3];        /* Reserved            */
  52.     Uchar    disk_id[4];        /* Disk identification        */
  53.     Uchar    last_lead_in[4];    /* Last session lead in time    */
  54.     Uchar    last_lead_out[4];    /* Last session lead out time    */
  55.     Uchar    disk_barcode[8];    /* Disk bar code        */
  56.     Uchar    res32;            /* Reserved            */
  57.     Uchar    num_opc_entries;    /* # of OPC table entries    */
  58.     opc_t    opc_table[1];        /* OPC table             */
  59. };
  60.  
  61. #else                /* Motorola bitorder */
  62.  
  63. struct disk_info {
  64.     Uchar    data_len[2];        /* Data len without this info    */
  65.     Ucbit    res2        : 3;    /* Reserved            */
  66.     Ucbit    erasable    : 1;    /* Disk is erasable        */
  67.     Ucbit    sess_status    : 2;    /* Status of last session    */
  68.     Ucbit    disk_status    : 2;    /* Status of the disk        */
  69.     Uchar    first_track;        /* # of first track on disk    */
  70.     Uchar    numsess;        /* # of sessions        */
  71.     Uchar    first_track_ls;        /* First track in last sessaion    */
  72.     Uchar    last_track_ls;        /* Last track in last sessaion    */
  73.     Ucbit    did_v        : 1;    /* Disk id valid        */
  74.     Ucbit    dbc_v        : 1;    /* Disk bar code valid        */
  75.     Ucbit    uru        : 1;    /* This is an unrestricted disk    */
  76.     Ucbit    res7_04        : 5;    /* Reserved            */
  77.     Uchar    disk_type;        /* Disk type            */
  78.     Uchar    res9[3];        /* Reserved            */
  79.     Uchar    disk_id[4];        /* Disk identification        */
  80.     Uchar    last_lead_in[4];    /* Last session lead in time    */
  81.     Uchar    last_lead_out[4];    /* Last session lead out time    */
  82.     Uchar    disk_barcode[8];    /* Disk bar code        */
  83.     Uchar    res32;            /* Reserved            */
  84.     Uchar    num_opc_entries;    /* # of OPC table entries    */
  85.     opc_t    opc_table[1];        /* OPC table             */
  86. };
  87.  
  88. #endif
  89.  
  90. struct cd_mode_data {
  91.     struct scsi_mode_header    header;
  92.     union cd_pagex    {
  93.         struct cd_mode_page_05    page05;
  94.         struct cd_mode_page_2A    page2A;
  95.     } pagex;
  96. };
  97.  
  98. struct tocheader {
  99.     char    len[2];
  100.     char    first;
  101.     char    last;
  102. };
  103.  
  104. #if defined(_BIT_FIELDS_LTOH)    /* Intel bitorder */
  105.  
  106. struct atipdesc {
  107.     Ucbit    ref_speed    : 3;    /* Reference speed        */
  108.     Ucbit    res4_3        : 1;    /* Reserved            */
  109.     Ucbit    ind_wr_power    : 3;    /* Indicative tgt writing power    */
  110.     Ucbit    res4_7        : 1;    /* Reserved (must be "1")    */
  111.     Ucbit    res5_05        : 6;    /* Reserved            */
  112.     Ucbit    uru        : 1;    /* Disk is for unrestricted use    */
  113.     Ucbit    res5_7        : 1;    /* Reserved (must be "0")    */
  114.     Ucbit    a3_v        : 1;    /* A 3 Values valid        */
  115.     Ucbit    a2_v        : 1;    /* A 2 Values valid        */
  116.     Ucbit    a1_v        : 1;    /* A 1 Values valid        */
  117.     Ucbit    sub_type    : 3;    /* Disc sub type        */
  118.     Ucbit    erasable    : 1;    /* Disk is erasable        */
  119.     Ucbit    res6_7        : 1;    /* Reserved (must be "1")    */
  120.     Uchar    lead_in[4];        /* Lead in time            */
  121.     Uchar    lead_out[4];        /* Lead out time        */
  122.     Uchar    res15;            /* Reserved            */
  123.     Ucbit    clv_high    : 4;    /* Highes usable CLV recording speed */
  124.     Ucbit    clv_low        : 3;    /* Lowest usable CLV recording speed */
  125.     Ucbit    res16_7        : 1;    /* Reserved (must be "0")    */
  126.     Ucbit    res17_0        : 1;    /* Reserved            */
  127.     Ucbit    tgt_y_pow    : 3;    /* Tgt y val of the power mod fun */
  128.     Ucbit    power_mult    : 3;    /* Power multiplication factor    */
  129.     Ucbit    res17_7        : 1;    /* Reserved (must be "0")    */
  130.     Ucbit    res_18_30    : 4;    /* Reserved            */
  131.     Ucbit    rerase_pwr_ratio: 3;    /* Recommended erase/write power*/
  132.     Ucbit    res18_7        : 1;    /* Reserved (must be "1")    */
  133.     Uchar    res19;            /* Reserved            */
  134.     Uchar    a2[3];            /* A 2 Values            */
  135.     Uchar    res23;            /* Reserved            */
  136.     Uchar    a3[3];            /* A 3 Vaules            */
  137.     Uchar    res27;            /* Reserved            */
  138. };
  139.  
  140. #else                /* Motorola bitorder */
  141.  
  142. struct atipdesc {
  143.     Ucbit    res4_7        : 1;    /* Reserved (must be "1")    */
  144.     Ucbit    ind_wr_power    : 3;    /* Indicative tgt writing power    */
  145.     Ucbit    res4_3        : 1;    /* Reserved            */
  146.     Ucbit    ref_speed    : 3;    /* Reference speed        */
  147.     Ucbit    res5_7        : 1;    /* Reserved (must be "0")    */
  148.     Ucbit    uru        : 1;    /* Disk is for unrestricted use    */
  149.     Ucbit    res5_05        : 6;    /* Reserved            */
  150.     Ucbit    res6_7        : 1;    /* Reserved (must be "1")    */
  151.     Ucbit    erasable    : 1;    /* Disk is erasable        */
  152.     Ucbit    sub_type    : 3;    /* Disc sub type        */
  153.     Ucbit    a1_v        : 1;    /* A 1 Values valid        */
  154.     Ucbit    a2_v        : 1;    /* A 2 Values valid        */
  155.     Ucbit    a3_v        : 1;    /* A 3 Values valid        */
  156.     Uchar    lead_in[4];        /* Lead in time            */
  157.     Uchar    lead_out[4];        /* Lead out time        */
  158.     Uchar    res15;            /* Reserved            */
  159.     Ucbit    res16_7        : 1;    /* Reserved (must be "0")    */
  160.     Ucbit    clv_low        : 3;    /* Lowest usable CLV recording speed */
  161.     Ucbit    clv_high    : 4;    /* Highes usable CLV recording speed */
  162.     Ucbit    res17_7        : 1;    /* Reserved (must be "0")    */
  163.     Ucbit    power_mult    : 3;    /* Power multiplication factor    */
  164.     Ucbit    tgt_y_pow    : 3;    /* Tgt y val of the power mod fun */
  165.     Ucbit    res17_0        : 1;    /* Reserved            */
  166.     Ucbit    res18_7        : 1;    /* Reserved (must be "1")    */
  167.     Ucbit    rerase_pwr_ratio: 3;    /* Recommended erase/write power*/
  168.     Ucbit    res_18_30    : 4;    /* Reserved            */
  169.     Uchar    res19;            /* Reserved            */
  170.     Uchar    a2[3];            /* A 2 Values            */
  171.     Uchar    res23;            /* Reserved            */
  172.     Uchar    a3[3];            /* A 3 Vaules            */
  173.     Uchar    res27;            /* Reserved            */
  174. };
  175.  
  176. #endif
  177.  
  178. struct atipinfo {
  179.     struct tocheader    hd;
  180.     struct atipdesc        desc;
  181. };
  182.  
  183. #if defined(_BIT_FIELDS_LTOH)    /* Intel bitorder */
  184.  
  185. struct track_info {
  186.     Uchar    data_len[2];        /* Data len without this info    */
  187.     Uchar    track_number;        /* Track number for this info    */
  188.     Uchar    session_number;        /* Session number for this info    */
  189.     Uchar    res4;            /* Reserved            */
  190.     Ucbit    track_mode    : 4;    /* Track mode (Q-sub control)    */
  191.     Ucbit    copy        : 1;    /* This track is a higher copy    */
  192.     Ucbit    damage        : 1;    /* if 1 & nwa_valid 0: inc track*/
  193.     Ucbit    res5_67        : 2;    /* Reserved            */
  194.     Ucbit    data_mode    : 4;    /* Data mode of this track    */
  195.     Ucbit    fp        : 1;    /* This is a fixed packet track    */
  196.     Ucbit    packet        : 1;    /* This track is in packet mode    */
  197.     Ucbit    blank        : 1;    /* This is an invisible track    */
  198.     Ucbit    rt        : 1;    /* This is a reserved track    */
  199.     Ucbit    nwa_valid    : 1;    /* Next writable addr valid    */
  200.     Ucbit    res7_17        : 7;    /* Reserved            */
  201.     Uchar    track_start[4];        /* Track start address        */
  202.     Uchar    next_writable_addr[4];    /* Next writable address    */
  203.     Uchar    free_blocks[4];        /* Free usr blocks in this track*/
  204.     Uchar    packet_size[4];        /* Packet size if in fixed mode    */
  205.     Uchar    track_size[4];        /* # of user data blocks in trk    */
  206. };
  207.  
  208. #else                /* Motorola bitorder */
  209.  
  210. struct track_info {
  211.     Uchar    data_len[2];        /* Data len without this info    */
  212.     Uchar    track_number;        /* Track number for this info    */
  213.     Uchar    session_number;        /* Session number for this info    */
  214.     Uchar    res4;            /* Reserved            */
  215.     Ucbit    res5_67        : 2;    /* Reserved            */
  216.     Ucbit    damage        : 1;    /* if 1 & nwa_valid 0: inc track*/
  217.     Ucbit    copy        : 1;    /* This track is a higher copy    */
  218.     Ucbit    track_mode    : 4;    /* Track mode (Q-sub control)    */
  219.     Ucbit    rt        : 1;    /* This is a reserved track    */
  220.     Ucbit    blank        : 1;    /* This is an invisible track    */
  221.     Ucbit    packet        : 1;    /* This track is in packet mode    */
  222.     Ucbit    fp        : 1;    /* This is a fixed packet track    */
  223.     Ucbit    data_mode    : 4;    /* Data mode of this track    */
  224.     Ucbit    res7_17        : 7;    /* Reserved            */
  225.     Ucbit    nwa_valid    : 1;    /* Next writable addr valid    */
  226.     Uchar    track_start[4];        /* Track start address        */
  227.     Uchar    next_writable_addr[4];    /* Next writable address    */
  228.     Uchar    free_blocks[4];        /* Free usr blocks in this track*/
  229.     Uchar    packet_size[4];        /* Packet size if in fixed mode    */
  230.     Uchar    track_size[4];        /* # of user data blocks in trk    */
  231. };
  232.  
  233. #endif
  234.  
  235. #if defined(_BIT_FIELDS_LTOH)    /* Intel bitorder */
  236.  
  237. struct rzone_info {
  238.     Uchar    data_len[2];        /* Data len without this info    */
  239.     Uchar    rzone_num_lsb;        /* RZone number LSB        */
  240.     Uchar    border_num_lsb;        /* Border number LSB        */
  241.     Uchar    res_4;            /* Reserved            */
  242.     Ucbit    res5_04        : 5;    /* Reserved            */
  243.     Ucbit    damage        : 1;    /* Damaged RZone        */
  244.     Ucbit    res5_67        : 2;    /* Reserved            */
  245.     Ucbit    res6_04        : 5;    /* Reserved            */
  246.     Ucbit    incremental    : 1;    /* RZone is to be written incremental */
  247.     Ucbit    blank        : 1;    /* RZone is blank        */
  248.     Ucbit    rt        : 1;    /* RZone is reserved        */
  249.     Ucbit    nwa_v        : 1;    /* Next WR address is valid    */
  250.     Ucbit    res7_17        : 7;    /* Reserved            */
  251.     Uchar    rzone_start[4];        /* RZone start address        */
  252.     Uchar    next_recordable_addr[4];/* Next recordable address    */
  253.     Uchar    free_blocks[4];        /* Free blocks in RZone        */
  254.     Uchar    block_factor[4];    /* # of sectors of disc acc unit */
  255.     Uchar    rzone_size[4];        /* RZone size            */
  256.     Uchar    last_recorded_addr[4];    /* Last Recorded addr in RZone    */
  257.     Uchar    rzone_num_msb;        /* RZone number MSB        */
  258.     Uchar    border_num_msb;        /* Border number MSB        */
  259.     Uchar    res_34_35[2];        /* Reserved            */
  260. };
  261.  
  262. #else                /* Motorola bitorder */
  263.  
  264. struct rzone_info {
  265.     Uchar    data_len[2];        /* Data len without this info    */
  266.     Uchar    rzone_num_lsb;        /* RZone number LSB        */
  267.     Uchar    border_num_lsb;        /* Border number LSB        */
  268.     Uchar    res_4;            /* Reserved            */
  269.     Ucbit    res5_67        : 2;    /* Reserved            */
  270.     Ucbit    damage        : 1;    /* Damaged RZone        */
  271.     Ucbit    res5_04        : 5;    /* Reserved            */
  272.     Ucbit    rt        : 1;    /* RZone is reserved        */
  273.     Ucbit    blank        : 1;    /* RZone is blank        */
  274.     Ucbit    incremental    : 1;    /* RZone is to be written incremental */
  275.     Ucbit    res6_04        : 5;    /* Reserved            */
  276.     Ucbit    res7_17        : 7;    /* Reserved            */
  277.     Ucbit    nwa_v        : 1;    /* Next WR address is valid    */
  278.     Uchar    rzone_start[4];        /* RZone start address        */
  279.     Uchar    next_recordable_addr[4];/* Next recordable address    */
  280.     Uchar    free_blocks[4];        /* Free blocks in RZone        */
  281.     Uchar    block_factor[4];    /* # of sectors of disc acc unit */
  282.     Uchar    rzone_size[4];        /* RZone size            */
  283.     Uchar    last_recorded_addr[4];    /* Last Recorded addr in RZone    */
  284.     Uchar    rzone_num_msb;        /* RZone number MSB        */
  285.     Uchar    border_num_msb;        /* Border number MSB        */
  286.     Uchar    res_34_35[2];        /* Reserved            */
  287. };
  288.  
  289. #endif
  290.  
  291. #if defined(_BIT_FIELDS_LTOH)    /* Intel bitorder */
  292.  
  293. struct dvd_structure_00 {
  294.     Uchar    data_len[2];        /* Data len without this info    */
  295.     Uchar    res23[2];        /* Reserved            */
  296.     Ucbit    book_version    : 4;    /* DVD Book version        */
  297.     Ucbit    book_type    : 4;    /* DVD Book type        */
  298.     Ucbit    minimum_rate    : 4;    /* Minimum data rate (coded)    */
  299.     Ucbit    disc_size    : 4;    /* Disc size (coded)        */
  300.     Ucbit    layer_type    : 4;    /* Layer type            */
  301.     Ucbit    track_path    : 1;    /* 0 = parallel, 1 = opposit dir*/
  302.     Ucbit    numlayers    : 2;    /* Number of Layers (0 == 1)    */
  303.     Ucbit    res2_7        : 1;    /* Reserved            */
  304.     Ucbit    track_density    : 4;    /* Track density (coded)    */
  305.     Ucbit    linear_density    : 4;    /* Linear data density (coded)    */
  306.     Uchar    res8;            /* Reserved            */
  307.     Uchar    phys_start[3];        /* Starting Physical sector #    */
  308.     Uchar    res12;            /* Reserved            */
  309.     Uchar    phys_end[3];        /* End physical data sector #    */
  310.     Uchar    res16;            /* Reserved            */
  311.     Uchar    end_layer0[3];        /* End sector # in layer    */
  312.     Ucbit    res20        : 7;    /* Reserved            */
  313.     Ucbit    bca        : 1;    /* BCA flag bit            */
  314. };
  315.  
  316. #else                /* Motorola bitorder */
  317.  
  318. struct dvd_structure_00 {
  319.     Uchar    data_len[2];        /* Data len without this info    */
  320.     Uchar    res23[2];        /* Reserved            */
  321.     Ucbit    book_type    : 4;    /* DVD Book type        */
  322.     Ucbit    book_version    : 4;    /* DVD Book version        */
  323.     Ucbit    disc_size    : 4;    /* Disc size (coded)        */
  324.     Ucbit    minimum_rate    : 4;    /* Minimum data rate (coded)    */
  325.     Ucbit    res2_7        : 1;    /* Reserved            */
  326.     Ucbit    numlayers    : 2;    /* Number of Layers (0 == 1)    */
  327.     Ucbit    track_path    : 1;    /* 0 = parallel, 1 = opposit dir*/
  328.     Ucbit    layer_type    : 4;    /* Layer type            */
  329.     Ucbit    linear_density    : 4;    /* Linear data density (coded)    */
  330.     Ucbit    track_density    : 4;    /* Track density (coded)    */
  331.     Uchar    res8;            /* Reserved            */
  332.     Uchar    phys_start[3];        /* Starting Physical sector #    */
  333.     Uchar    res12;            /* Reserved            */
  334.     Uchar    phys_end[3];        /* End physical data sector #    */
  335.     Uchar    res16;            /* Reserved            */
  336.     Uchar    end_layer0[3];        /* End sector # in layer    */
  337.     Ucbit    bca        : 1;    /* BCA flag bit            */
  338.     Ucbit    res20        : 7;    /* Reserved            */
  339. };
  340.  
  341. #endif
  342.  
  343. struct dvd_structure_01 {
  344.     Uchar    data_len[2];        /* Data len without this info    */
  345.     Uchar    res23[2];        /* Reserved            */
  346.     Uchar    copyr_prot_type;    /* Copyright prot system type    */
  347.     Uchar    region_mgt_info;    /* Region management info    */
  348.     Uchar    res67[2];        /* Reserved            */
  349. };
  350.  
  351. struct dvd_structure_02 {
  352.     Uchar    data_len[2];        /* Data len without this info    */
  353.     Uchar    res23[2];        /* Reserved            */
  354.     Uchar    key_data[2048];        /* Disc Key data        */
  355. };
  356.  
  357. struct dvd_structure_03 {
  358.     Uchar    data_len[2];        /* Data len without this info    */
  359.     Uchar    res23[2];        /* Reserved            */
  360.     Uchar    bca_info[1];        /* BCA information (12-188 bytes)*/
  361. };
  362.  
  363. struct dvd_structure_04 {
  364.     Uchar    data_len[2];        /* Data len without this info    */
  365.     Uchar    res23[2];        /* Reserved            */
  366.     Uchar    man_info[2048];        /* Disc manufacturing info    */
  367. };
  368.  
  369. #if defined(_BIT_FIELDS_LTOH)    /* Intel bitorder */
  370.  
  371. struct dvd_structure_05 {
  372.     Uchar    data_len[2];        /* Data len without this info    */
  373.     Uchar    res23[2];        /* Reserved            */
  374.     Ucbit    res4_03        : 4;    /* Reserved            */
  375.     Ucbit    cgms        : 2;    /* CGMS (see below)        */
  376.     Ucbit    res4_6        : 1;    /* Reserved            */
  377.     Ucbit    cpm        : 1;    /* This is copyrighted material    */
  378.     Uchar    res57[3];        /* Reserved            */
  379. };
  380.  
  381. #else                /* Motorola bitorder */
  382.  
  383. struct dvd_structure_05 {
  384.     Uchar    data_len[2];        /* Data len without this info    */
  385.     Uchar    res23[2];        /* Reserved            */
  386.     Ucbit    cpm        : 1;    /* This is copyrighted material    */
  387.     Ucbit    res4_6        : 1;    /* Reserved            */
  388.     Ucbit    cgms        : 2;    /* CGMS (see below)        */
  389.     Ucbit    res4_03        : 4;    /* Reserved            */
  390.     Uchar    res57[3];        /* Reserved            */
  391. };
  392.  
  393. #endif
  394.  
  395. #define    CGMS_PERMITTED        0    /* Unlimited copy permitted    */
  396. #define    CGMS_RES        1    /* Reserved            */
  397. #define    CGMS_ONE_COPY        2    /* One copy permitted        */
  398. #define    CGMS_NO_COPY        3    /* No copy permitted        */
  399.  
  400. struct dvd_structure_0D {
  401.     Uchar    data_len[2];        /* Data len without this info    */
  402.     Uchar    res23[2];        /* Reserved            */
  403.     Uchar    last_rma_sector[2];    /* Last recorded RMA sector #    */
  404.     Uchar    rmd_bytes[1];        /* Content of Record man area    */
  405. };
  406.  
  407. struct dvd_structure_0E {
  408.     Uchar    data_len[2];        /* Data len without this info    */
  409.     Uchar    res23[2];        /* Reserved            */
  410.     Uchar    field_id;        /* Field ID (1)            */
  411.     Uchar    application_code;    /* Disc Application code    */
  412.     Uchar    phys_data;        /* Disc Phisical Data        */
  413.     Uchar    last_recordable_addr[3];/* Last addr of recordable area    */
  414.     Uchar    res_a[2];        /* Reserved            */
  415.     Uchar    field_id_2;        /* Field ID (2)            */
  416.     Uchar    ind_wr_power;        /* Recommended writing power    */
  417.     Uchar    ind_wavelength;        /* Wavelength for ind_wr_power    */
  418.     Uchar    opt_wr_strategy;    /* Optimum write Strategy    */
  419.     Uchar    res_b[4];        /* Reserved            */
  420.     Uchar    field_id_3;        /* Field ID (3)            */
  421.     Uchar    man_id[6];        /* Manufacturer ID        */
  422.     Uchar    res;            /* Reserved            */
  423. };
  424.  
  425. struct dvd_structure_0F {
  426.     Uchar    data_len[2];        /* Data len without this info    */
  427.     Uchar    res23[2];        /* Reserved            */
  428.     Uchar    res45[2];        /* Reserved            */
  429.     Uchar    random[2];        /* Random number        */
  430.     Uchar    year[4];        /* Year (ascii)            */
  431.     Uchar    month[2];        /* Month (ascii)        */
  432.     Uchar    day[2];            /* Day (ascii)            */
  433.     Uchar    hour[2];        /* Hour (ascii)            */
  434.     Uchar    minute[2];        /* Minute (ascii)        */
  435.     Uchar    second[2];        /* Second (ascii)        */    
  436. };
  437.  
  438. struct dvd_structure_0F_w {
  439.     Uchar    data_len[2];        /* Data len without this info    */
  440.     Uchar    res23[2];        /* Reserved            */
  441.     Uchar    res45[2];        /* Reserved            */
  442.     Uchar    year[4];        /* Year (ascii)            */
  443.     Uchar    month[2];        /* Month (ascii)        */
  444.     Uchar    day[2];            /* Day (ascii)            */
  445.     Uchar    hour[2];        /* Hour (ascii)            */
  446.     Uchar    minute[2];        /* Minute (ascii)        */
  447.     Uchar    second[2];        /* Second (ascii)        */    
  448. };
  449.  
  450. struct mmc_cue {
  451.     Uchar    cs_ctladr;        /* CTL/ADR for this track    */
  452.     Uchar    cs_tno;            /* This track number        */
  453.     Uchar    cs_index;        /* Index within this track    */
  454.     Uchar    cs_dataform;        /* Data form             */
  455.     Uchar    cs_scms;        /* Serial copy management    */
  456.     Uchar    cs_min;            /* Absolute time minutes    */
  457.     Uchar    cs_sec;            /* Absolute time seconds    */
  458.     Uchar    cs_frame;        /* Absolute time frames        */
  459. };
  460.  
  461. #endif    /* _SCSIMMC_H */
  462.